package pe.com.hermes.hermetic.modelo.daoimpl;

import com.ibatis.sqlmap.client.SqlMapClient;

import java.util.Collections;

import pe.com.hermes.hermetic.beans.BovedaBean;
import pe.com.hermes.hermetic.beans.ClienteBean;
import pe.com.hermes.hermetic.beans.SucursalBean;
import pe.com.hermes.hermetic.modelo.dao.ClienteDAO;
import pe.com.hermes.hermetic.negocio.ultil.CadenaUtil;

import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import oracle.jdbc.OracleTypes;

import org.apache.log4j.Logger;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.CallableStatementCallback;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

import pe.com.hermes.unidadesnegocio.comercial.entities.ClienteEntity;


@Repository("clienteDAO")
public class ClienteDAOImpl implements ClienteDAO {
    @Autowired
    protected JdbcTemplate jdbcTemplate;
    private Logger logger = Logger.getLogger(this.getClass());
    @Autowired
    private SqlMapClient sqlMapClient;    

    public ClienteBean getCliente(String codCliente) {
        String query = 
            "select cod_clie,nom_clie from ve_cliente where cod_clie = ? ";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),query);
        Object[] params = new Object[] { codCliente };
        return (ClienteBean)this.jdbcTemplate.queryForObject(query, params, 
                                                             new ClienteMapper());
    }

//************YNFR*****18/04/2011************ Begin
  public List buscarCliente(final String codCliente, 
                            final String desClient,
                            final String codSucu) throws Exception    {
  
     Map map = new HashMap();
     map.put("P_COD_CLIE",codCliente);
     map.put("P_DES_CLIE",desClient);
     map.put("P_COD_SUCU",codSucu);
     List listClientes=new ArrayList();
     int erro = 0;
     try{
         sqlMapClient.queryForObject("buscarCliente",map);
         erro=(Integer)map.get("S_ERRO");
         if(erro==0)
             listClientes = (List)map.get("S_LIST");
         else
             throw new Exception((String)map.get("S_MENS"));
     }catch(Exception e){
         logger.error(e);
         e.printStackTrace();
         listClientes = new ArrayList();
     }
     return listClientes;
                           }
//************YNFR*****18/04/2011************ End
    public ClienteBean getClientePorRazon(String razon) {
        String query =

            "select cod_clie ,nom_clie  from ve_cliente where COD_RAZO_SOCI= ? and " + 
            " tip_clie = 1 and ind_acti= 1";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),query);
        Object[] params = new Object[] { razon };
        try {
            return (ClienteBean)this.jdbcTemplate.queryForObject(query, params, 
                                                                 new ClienteMapper());
        } catch (EmptyResultDataAccessException e) {
            return null;
        }
    }

    public String getSucursalPunto(final String codCliente, 
                                   final String codPunto) {
      logger.info(" metodo: getSucursalPunto");
      logger.info("codCliente  : "+codCliente);
      logger.info("codPunto  : "+codPunto);
        String SQL = 
            "{ call APERTURA.HWPG_TABL.HWPR_RETU_SUCU_PUNT(?,?,?) }";
        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        final StringBuffer sucursal_punto = new StringBuffer();
        CallableStatementCallback cs = new CallableStatementCallback() {
                public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
                                                                                   SQLException {
                    arg0.setString(1, codCliente);
                    arg0.setString(2, codPunto);
                    arg0.registerOutParameter(3, OracleTypes.VARCHAR);
                    arg0.execute();
                    sucursal_punto.append(arg0.getString(3));
                    return sucursal_punto;
                }
            };
        this.jdbcTemplate.execute(SQL, cs);

        return sucursal_punto.toString();
    }
    public String getSucursalPunto(final String codCliente,final String codCnta, 
                                   final String tipUnidMone,final String codClieObanc, 
                                   final String codPunto) {        
        String SQL = 
            "{ call APERTURA.HWPG_TABL.HWPR_RETU_SUCU_PUNT_MONE(?,?,?,?,?,?,?,?) }";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        final StringBuffer sucursal_punto = new StringBuffer();
        CallableStatementCallback cs = new CallableStatementCallback() {
                public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
                                                                                   SQLException {
                    arg0.setString(1, codCliente);
                    arg0.setString(2, codCnta);
                    arg0.setString(3, tipUnidMone);
                    arg0.setString(4, codClieObanc);
                    arg0.setString(5, codPunto);
                    arg0.registerOutParameter(6, OracleTypes.VARCHAR);
                    arg0.registerOutParameter(7, OracleTypes.NUMBER);
                    arg0.registerOutParameter(8, OracleTypes.VARCHAR);
                    arg0.execute();
                    sucursal_punto.append(arg0.getString(6));
                    logger.error(arg0.getString(8));
                    return sucursal_punto;
                }
            };
        this.jdbcTemplate.execute(SQL, cs);

        return sucursal_punto.toString();
    }

    public String getBovedaDePedido(final String cod_clie,final  String cod_sucu_htb, 
                                    final String cod_cnta,final String tip_unid_mone, final String tip_mone) {
        String SQL = 
            "{ call APERTURA.HWPG_TABL.HWPR_RETU_BOVE_PEDI_DETA(?,?,?,?,?,?,?,?) }";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        final StringBuffer boveda = new StringBuffer();
        CallableStatementCallback cs = new CallableStatementCallback() {
                public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
                                                                                   SQLException {
                    arg0.setString(1, cod_clie);
                    arg0.setString(2, cod_cnta);
                    arg0.setString(3, cod_sucu_htb);
                    arg0.setString(4, tip_unid_mone);
                    arg0.setString(5, tip_mone);
                    arg0.registerOutParameter(6, OracleTypes.VARCHAR);
                    arg0.registerOutParameter(7, OracleTypes.NUMBER);
                    arg0.registerOutParameter(8, OracleTypes.VARCHAR);
                    arg0.execute();
                    boveda.append(arg0.getString(6));
                    logger.error(arg0.getString(8));
                    return boveda;
                }
            };
        this.jdbcTemplate.execute(SQL, cs);

        return boveda.toString();
        }

    public List getListParamByClie(Integer codClie, Integer codSucursal) {
        
        logger.info("metodo : getListParamByClie");
        logger.info("codClie :"+codClie);
        logger.info("codSucursal  : "+codSucursal);
        
        
        List getListParamByClie = new ArrayList();
        Map map = new HashMap();
        map.put("P_COD_CLIE",codClie);
        map.put("P_COD_SUCU",codSucursal);
        
        try{
            sqlMapClient.queryForObject("getListParamByClie",map);
            getListParamByClie = (List)map.get("S_LIST");
        }catch(Exception e){
            logger.error(e);
        }
        return getListParamByClie;
        
    }

    

    /**
     * Clase ClienteMapper para llenar la Lista de Resultados
     */
    protected class ClienteMapper implements RowMapper {
        public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
            //Establecer los atributos en la entidad ClienteBean
            ClienteBean cliente = new ClienteBean();
            cliente.setCodCliente(rs.getString(1));
            cliente.setNombre(rs.getString(2));
            return cliente;
        }
    }

    public int getCantidadClientes(String codCliente) {
        String query = 
            " select nvl(count(*),0) cantidad from ve_clie_grup where " + 
            " cod_clie_grup= ?";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),query);    
        Object[] params = new Object[] { codCliente };
        return jdbcTemplate.queryForInt(query, params);
    }

    public List getEmpresasGrupo(String codCliente) {
        logger.info("Obtener empresas por grupo");
        String query = 
            " select distinct a.cod_clie,b.nom_clie from ve_clie_grup a,ve_cliente b where " + 
            " cod_clie_grup =  ? and b.cod_clie=a.cod_clie order by 2,1 ";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),query);
        //Establecer los parametros
        Object[] params = new Object[] { codCliente };
        //Ejecutar el query
        return jdbcTemplate.query(query, params, new ClienteMapper());
    }

    public String getDescripcion(String cliente) {
        String SQL = 
            "Select distinct b.nom_clie nom_clie " + " from ac_cuenta a, ve_cliente b " + 
            " where a.cod_clie = ? " + " and b.cod_clie = a.cod_clie " + 
            " and b.ind_acti = '1' ";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        //Establecer los parametros
        Object[] params = new Object[] { cliente };
        //Ejecutar el query
        try {
            return (String)this.jdbcTemplate.queryForObject(SQL, params, 
                                                            String.class);
        } catch (final EmptyResultDataAccessException e) {
            return "";
        }
    }


    //

    public String getClientesPorBanco(String banco, String codCliente) {
        String SQL = 
            "select distinct b.nom_clie" + " from he_clie_cnta a,ve_cliente b where" + 
            " cod_bco= ? and a.cod_clie_bco = ? and b.cod_clie = a.cod_clie_bco";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        //Establecer los parametros
        Object[] params = new Object[] { banco, codCliente };
        //Ejecutar el query
        try {
            return (String)this.jdbcTemplate.queryForObject(SQL, params, 
                                                            String.class);
        } catch (final EmptyResultDataAccessException e) {
            return "";
        }
    }

    public List getListadoCambioClientes(String sucursal) {
        String SQL = 
            "select distinct a.cod_clie cod_clie , a.nom_clie nom_clie" + 
            " from   ac_cuenta_bove c, ac_cuenta b, ve_cliente a " + 
            " where  b.cod_sucu_htb = ? " + 
            " and    b.cod_clie = a.cod_clie " + 
            " and    c.cod_sucu_htb = b.cod_sucu_htb" + 
            " and    c.cod_clie = b.cod_clie " + 
            " and    c.cod_cnta = b.cod_cnta " + " and    a.ind_acti = 1 " + 
            " and    a.tip_clie = 1 " +
            "UNION SELECT DISTINCT cl.cod_clie cod_clie,cl.nom_clie nom_clie " + 
            "FROM general.csmc_usua_web w, general.csmd_modu_clie c, ventas.ve_cliente cl " + 
            "WHERE " + 
            "     w.usu_web=c.usu_web " + 
            "AND  c.cod_modu='HW' " + 
            "AND  c.ind_acti=1 " + 
            "AND  w.ind_acti=1 " + 
            "AND  NOT EXISTS (SELECT 1 FROM " + 
            "                 VE_CLIENTE cli " + 
            "                 WHERE cli.cod_razo_soci=c.cod_razo_soci " + 
            "                 AND   cli.tip_clie=1 " + 
            "                 )" + 
            "AND c.cod_razo_soci=cl.cod_razo_soci " + 
            "AND c.cod_razo_soci <>237 " + 
            "GROUP BY w.cod_razo_soci,cl.cod_clie,cl.nom_clie "+ " Order by nom_clie";
        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        Object[] params = new Object[] { sucursal };
        //Ejecutar el query
        return jdbcTemplate.query(SQL, params, new ClienteMapper());
    }

    public List getSucursales() {
        String SQL = 
            "select des_sucu,cod_sucu " + " from   csmc_sucu " + " Order by cod_sucu ";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        return jdbcTemplate.query(SQL, new SucursalMapper());
    }

    public List getSucursalesNoTodos() {
        String SQL = 
            "select des_sucu,cod_sucu " + " from   csmc_sucu " + " where cod_sucu<>99 " + 
            " Order by cod_sucu ";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        return jdbcTemplate.query(SQL, new SucursalMapper());
    }

    protected class SucursalMapper implements RowMapper {
        public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
            //Establecer los atributos en la entidad 
            SucursalBean sucursal = new SucursalBean();
            sucursal.setCodSucursal(rs.getString(2));
            sucursal.setDesSucursal(rs.getString(1));
            return sucursal;
        }
    }


    public List getSucursalesSaldo() {
        String SQL = 
            "select  b.des_sucu_htb, a.cod_sucu_htb" + " from tg_sucursal_htb b, (select distinct(cod_sucu_htb) cod_sucu_htb" + 
            "                                  from   tv_saldo ) a" + 
            " where  b.cod_sucu_htb = a.cod_sucu_htb";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        return jdbcTemplate.query(SQL, new SucursalMapper());
    }

    public String getDescripcionSucursal(String codSucursal) {
        String SQL = 
            "select des_sucu" + " from   csmc_sucu " + " where  cod_sucu = ?";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        //Establecer los parametros
        Object[] params = new Object[] { codSucursal };
        //Ejecutar el query
        try {
            return (String)this.jdbcTemplate.queryForObject(SQL, params, 
                                                            String.class);
        } catch (final EmptyResultDataAccessException e) {
            return "";
        }
    }

      /** Mod. JSM 15-10-09  **/
      public List getClientesDelBanco(final String banco, final String nomCliente) {

        logger.info("busca clientes de banco para numeros de cuenta.");
        String SQL = "{ call APERTURA.HWPG_PUNT.HWPR_LIST_CLIE_BANC(?,?,?,?,?) }";

        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        final List listado = new ArrayList();
        CallableStatementCallback cs = new CallableStatementCallback() {
        public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
        SQLException {
            arg0.setString("P_COD_CLIE", banco);
            arg0.setString("P_NOM_CLIE", nomCliente);
            arg0.registerOutParameter("S_LIST", OracleTypes.CURSOR);
            arg0.registerOutParameter("S_ERRO", OracleTypes.NUMBER);
            arg0.registerOutParameter("S_MENS", OracleTypes.VARCHAR);            
            arg0.execute();
        logger.error(arg0.getString("S_MENS"));
        ResultSet rs = (ResultSet)arg0.getObject("S_LIST");
        while(rs.next()){
             ClienteBean cliente = new ClienteBean();
             cliente.setCodCliente(rs.getString("cod_clie"));
             cliente.setNombre(rs.getString("nom_clie"));
             listado.add(cliente);
         }
         return listado;
       }
     };
     this.jdbcTemplate.execute(SQL, cs);
     return listado;
     } 
   
    /** Mod. JSM 06-11-09  **/
     public List getClientes(final String nomCliente) {

       logger.info("busca clientes de banco para numeros de cuenta.");
       String SQL = "{ call APERTURA.HWPG_PUNT.HWPR_LIST_CLIE(?,?,?,?) }";

        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
       final List listado = new ArrayList();
       CallableStatementCallback cs = new CallableStatementCallback() {
       public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
       SQLException {
           arg0.setString("P_NOM_CLIE", nomCliente);
           arg0.registerOutParameter("S_LIST", OracleTypes.CURSOR);
           arg0.registerOutParameter("S_ERRO", OracleTypes.NUMBER);
           arg0.registerOutParameter("S_MENS", OracleTypes.VARCHAR);            
           arg0.execute();
       logger.error(arg0.getString("S_MENS"));
       ResultSet rs = (ResultSet)arg0.getObject("S_LIST");
       while(rs.next()){
            ClienteBean cliente = new ClienteBean();
            cliente.setCodCliente(rs.getString("cod_clie"));
            cliente.setNombre(rs.getString("nom_clie"));
            listado.add(cliente);
        }
        return listado;
      }
    };
    this.jdbcTemplate.execute(SQL, cs);
    return listado;
    } 
    /**
        * Clase CuentaMapper para llenar la Lista de Resultados
        */
    protected class BusquedaClienteMapper implements RowMapper {
        public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
            //Establecer los atributos en la entidad CuentaBean
            ClienteBean cliente = new ClienteBean();
            cliente.setCodCliente(rs.getString("cod_clie_bco"));
            cliente.setNombre(rs.getString("nom_clie"));
            return cliente;
        }
    }
    
    
    /** Mod. NSC 13-08-09  **/
    public List getBovedas(final String sucursal,final String cliente) {

       logger.info("Inserta datos en tabla de auditoria.");
       String SQL = "{ call APERTURA.HWPG_TABL.HWPR_LIST_BOVE_CLIE(?,?,?,?,?) }";

        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
       final List listaboveda = new ArrayList();
       CallableStatementCallback cs = new CallableStatementCallback() {
       public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
       SQLException {
           arg0.setString("P_COD_SUCU_HTB", sucursal);
           arg0.setString("P_COD_CLIE", cliente);
           arg0.registerOutParameter("S_LIST", OracleTypes.CURSOR);
           arg0.registerOutParameter("S_ERRO", OracleTypes.NUMBER);
           arg0.registerOutParameter("S_MENS", OracleTypes.VARCHAR);            
           arg0.execute();
       logger.error(arg0.getString("S_MENS"));
       ResultSet rs = (ResultSet)arg0.getObject("S_LIST");
       while(rs.next()){
              BovedaBean bov = new BovedaBean();
              bov.setCodBoveda(rs.getString(1));
              bov.setDescripcion(rs.getString(2));
              listaboveda.add(bov);
        }
        return listaboveda;
      }
    };
    this.jdbcTemplate.execute(SQL, cs);
    return listaboveda;
    } 
    /** Fin NSC **/
    
    protected class BovedaMapper implements RowMapper {
        public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
            //Establecer los atributos en la entidad ClienteBean
            BovedaBean bov = new BovedaBean();
            bov.setDescripcion(rs.getString(1));
            bov.setCodBoveda(rs.getString(2));
            return bov;
        }
    }

    public String getDescripcionGrupo(String cliente, String grupo) {
        String SQL = 
            "select distinct b.nom_clie,a.cod_clie" + " from ve_clie_grup a,ve_cliente b where" + 
            " cod_clie_grup= ? and" + 
            " a.cod_clie = ? and b.cod_clie=a.cod_clie" + " order by 1,2 ";
        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        //Establecer los parametros
        Object[] params = new Object[] { cliente, grupo };
        //Ejecutar el query
        try {
            return (String)this.jdbcTemplate.queryForObject(SQL, params, 
                                                            String.class);
        } catch (final EmptyResultDataAccessException e) {
            return "";
        }
    }

    public List getListadoClientes(String nombre) {
        String SQL = 
            "SELECT cod_clie, nom_clie FROM ve_cliente" + " WHERE ind_acti = 1" + 
            "   and nom_clie like ?" + " order by 2";
        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        Object[] params = new Object[] { nombre };
        //Ejecutar el query
        return jdbcTemplate.query(SQL, params, new ClienteMapper());
    }

    public String getDescripcionSucursalH(String codSucursal) {
        String SQL = 
            "select des_sucu_htb from tg_sucursal_htb where cod_sucu_htb = ?";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        //Establecer los parametros
        Object[] params = new Object[] { codSucursal };
        //Ejecutar el query
        try {
            return (String)this.jdbcTemplate.queryForObject(SQL, params, 
                                                            String.class);
        } catch (final EmptyResultDataAccessException e) {
            return "";
        }
    }


    public String getSucursalNumero(final String codBanco, 
                                    final String codCliente, 
                                    final String codDestino) {

        String SQL = 
            "{ call APERTURA.HWPG_TABL.HWPR_RETU_SUCU_CODI(?,?,?,?) }";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        final StringBuffer respuesta = new StringBuffer("");
        this.jdbcTemplate.execute(SQL, new CallableStatementCallback() {
                    public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
                                                                                       SQLException {
                        arg0.setString(1, codBanco);
                        arg0.setString(2, codCliente);
                        arg0.setString(3, codDestino);
                        arg0.registerOutParameter(4, OracleTypes.VARCHAR);
                        arg0.execute();
                        respuesta.append(arg0.getString(4));

                        return respuesta.toString();
                    }
                });

        return respuesta.toString();

    }
    
    /*JRA- 02/05/2011 Metodo para buscar clientes por Tipo de cliente*/
    public List getListClienteXTipo(String tipoCliente,String descCliente) throws Exception    {
    
       Map map = new HashMap();
       map.put("P_TIP_CLIE",tipoCliente);
       map.put("P_DESC_CLIE",descCliente);
       List listClientes=new ArrayList();
       int erro = 0;
       try{
           sqlMapClient.queryForObject("getListClieXTipo",map);
           erro=(Integer)map.get("S_ERRO");
           if(erro==0)
               listClientes = (List)map.get("S_LIST");
           else
               throw new Exception((String)map.get("S_MENS"));
       }catch(Exception e){
           logger.error(e);
           e.printStackTrace();
           listClientes = new ArrayList();
       }
       return listClientes;
                             }

    /*JRA- 25/05/2011 Metodo para buscar clientes para indicadores de servicio*/
    public List getListClieArchInd(String descCliente) throws Exception    {
    
       Map map = new HashMap();
       map.put("P_DESC_CLIE",descCliente);
       List listClientes=new ArrayList();
       int erro = 0;
       try{
           sqlMapClient.queryForObject("getListClieArchInd",map);
           erro=(Integer)map.get("S_ERRO");
           if(erro==0)
               listClientes = (List)map.get("S_LIST");
           else
               throw new Exception((String)map.get("S_MENS"));
       }catch(Exception e){
           logger.error(e);
           e.printStackTrace();
           listClientes = new ArrayList();
       }
       return listClientes;
    }
    
    public List<ClienteEntity> getListClieArchPedi(){
        Map map = new HashMap();
        List<ClienteEntity> listClientes=new ArrayList<ClienteEntity>();
        int erro = 0;
        try{
            sqlMapClient.queryForObject("getListClieArchPedi",map);
            erro=(Integer)map.get("S_ERRO");
            if(erro==0)
                listClientes = (List<ClienteEntity>)map.get("S_LIST");
            else
                throw new Exception((String)map.get("S_MENS"));
        }catch(Exception e){
            logger.error(e);
            e.printStackTrace();
            listClientes = new ArrayList<ClienteEntity>();
        }
        return listClientes;
    }
    
  public List getListClieByCorp(int codCorp, String usuWeb,String desClie){
    logger.info("metodo : getListClieByCorp");
    List list = new ArrayList();
    Map map = new HashMap();
    logger.info("codCorp :"+codCorp);
    logger.info("usuWeb :"+usuWeb);
    logger.info("desClie :"+desClie);
    
    map.put("P_COD_CORP",codCorp);
    map.put("P_USU_WEB",usuWeb);
    map.put("P_DES_CLIE",desClie);
    int erro = 0;
    try{
        sqlMapClient.queryForObject("getListClieByCorp",map);
        erro = (Integer)map.get("S_ERRO");
        if(erro==0)
            list=(List)map.get("S_LIST");
        else
            throw new Exception(map.get("S_MENS").toString());
    }catch(Exception e){
        logger.error(e);
    }finally{
        return list;    
    }
  }
  
  public List getListBancByClie(String listCodClie, String desBanco){
    List list = new ArrayList();
    Map map = new HashMap();
    map.put("P_LIST_COD_CLIE", listCodClie);
    map.put("P_DESC_BANC", desBanco);
    int erro = 0;
    try{
        sqlMapClient.queryForObject("getListBancByClie",map);
        erro = (Integer)map.get("S_ERRO");
        if(erro==0)
            list=(List)map.get("S_LIST");
        else
            throw new Exception(map.get("S_MENS").toString());
    }catch(Exception e){
        logger.error(e);
    }finally{
        return list;    
    }
  }
  
  public List getListClieCntaByCorp(int codCorp, int codSucuHtb, String desClie){
    List list = new ArrayList();
    Map map = new HashMap();
    map.put("P_COD_CORP",codCorp);
    map.put("P_COD_SUCU_HTB",codSucuHtb);
    map.put("P_DES_CLIE",desClie);
    int erro = 0;
    try{
        sqlMapClient.queryForObject("getListClieCntaByCorp",map);
        erro = (Integer)map.get("S_ERRO");
        if(erro==0)
            list=(List)map.get("S_LIST");
        else
            throw new Exception(map.get("S_MENS").toString());
    }catch(Exception e){
        logger.error(e);
    }finally{
        return list;    
    }
  }
  
  public List getListBancPediByClie(String listCodClie, String desBanco) {
    List list = new ArrayList();
    Map map = new HashMap();
    map.put("P_LIST_COD_CLIE", listCodClie);
    map.put("P_DESC_BANC", desBanco);
    int erro = 0;
    try{
        sqlMapClient.queryForObject("getListBancPediByClie",map);
        erro = (Integer)map.get("S_ERRO");
        if(erro==0)
            list=(List)map.get("S_LIST");
        else
            throw new Exception(map.get("S_MENS").toString());
    }catch(Exception e){
        logger.error(e);
    }finally{
        return list;    
    }
  }
  
  public String getPersParmDinaRzsc(String codRazoSoci, String codSucuHtb, String codParm, String nomCamp) {
    String parm = "";
    Map map = new HashMap();
    map.put("P_COD_RZSC", codRazoSoci);
    map.put("P_COD_SUCU", codSucuHtb);
    map.put("P_COD_PARM", codParm);
    map.put("P_NOM_CAMP", nomCamp);
    int erro = 0;
    try{
        sqlMapClient.queryForObject("getPersParmDinaRzsc",map);
        erro = (Integer)map.get("S_ERRO");
        if(erro==0)
            parm=(String)map.get("S_RES_PARM");
        else
            throw new Exception(map.get("S_MENS").toString());
    }catch(Exception e){
        logger.error(e);
    }finally{
        return parm;    
    }
  }
   
  public String getPersParmDinaClie(String codClie, String codSucuHtb, String codParm, String nomCamp) {
    String parm = "";
    Map map = new HashMap();
    map.put("P_COD_CLIE", codClie);
    map.put("P_COD_SUCU", codSucuHtb);
    map.put("P_COD_PARM", codParm);
    map.put("P_NOM_CAMP", nomCamp);
    int erro = 0;
    try{
        sqlMapClient.queryForObject("getPersParmDinaClie",map);
        erro = (Integer)map.get("S_ERRO");
        if(erro==0)
            parm=(String)map.get("S_RES_PARM");
        else
            throw new Exception(map.get("S_MENS").toString());
    }catch(Exception e){
        logger.error(e);
    }finally{
        return parm;    
    }
  } 
}
